package com.controller;

import com.pojo.User;
import com.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@Controller
@RequestMapping("/User")  //放在类上面表示上层的url方法上表示下层的url，最终是两个拼接
public class UserController {
    @Autowired//这里装备的是UserServiceImpl
    private UserService userService;


    //这里可以设置对应的请求方法类型
    @RequestMapping("/register")
    public String register(User user, Model model){
        System.out.println(user);
        model.addAttribute("name",user.getName());
      //  return "/WEB-INF/jsp/userRegisterRosult.jsp";
//        用了视图解析器之后的代码
        return "userRegisterRosult";
    }
//接受get请求,返回一个user.jsp页面
    @GetMapping("/user")
    public String user(){
        return "user";
    }
    @PostMapping("/ajaxRegister")
    @ResponseBody //含义表示把ajax请求结果放在ResponseBody里面
    public Map<String,Object> ajaxRegister(User user){
        System.out.println(user);
        //构造json格式的返回结果
        Map<String, Object> result = new HashMap<>();
        boolean added = userService.addM(user);
        if (added) {
            result.put("code", 0);
            result.put("user", user);
            result.put("message", "注册成功");
        }else {
            result.put("code",-1);
            result.put("message","注册失败");
        }
        return result;
    }

    @PostMapping("/ajaxRegisterRole")
    @ResponseBody
    public Map<String,Object> ajaxRegisterRole(@RequestBody User user){ //@RequestBody含义就是框架把整个请求体里面数据拿出来，直接转成User对象
        System.out.println(user);
        //构造json格式的返回结果
        Map<String, Object> result = new HashMap<>();
        result.put("code",0);
        result.put("user",user);
        result.put("message","注册成功");
        return result;
    }
//文件上传功能
    @PostMapping("ajaxFile")
    @ResponseBody
    public Map<String, Object> ajaxFile(User user, MultipartFile headImage,
                                        MultipartHttpServletRequest request){
        System.out.println(user);
        if (headImage != null){//打印文件名
            saveFile(headImage,request);
            System.out.println(headImage.getOriginalFilename());
        }
        Map<String, Object> result = new HashMap<>();
        result.put("code",0);
        result.put("user",user);
        result.put("message","注册成功");
        return result;
    }
    //保存头像文件
    private void saveFile(MultipartFile heaImage,
                          MultipartHttpServletRequest request){
        //判段一下传来的文件的格式，是不是image格式类型，如果是就直接返回。
        if (heaImage.getContentType().startsWith("image")){
            //这个是一个web上的路径
            String webPah="/WEB-INF/statics/upload";
            //将web的虚拟路径转化真实路径
            String realPath = request.getServletContext().getRealPath(webPah);
            //拿文件名
            String fileName = heaImage.getOriginalFilename();
            //完整的文件名
            String fileToPah = realPath + fileName;
            try{
                //保存这个文件
                heaImage.transferTo(new File(fileToPah));
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}
